package Entities;

import java.io.Serializable;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@NamedQueries({
    @NamedQuery(name = "todasReservas", query = "select r from Reserva r"),})
public class Reserva implements Serializable {

    private static final long serialVersionUID = 1L;
    //Atributos
    @SequenceGenerator(name = "seq", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
    @Id
    private int id;
    @Temporal(value = TemporalType.TIMESTAMP)
    private Calendar fechaHora;
    private String comentario;
    @OneToMany(fetch = FetchType.EAGER)
    private List<Mesa> listaMesas;
    @ManyToOne
    private Cliente cliente;
    private int horario;
    private int cantidad = 1;
    private boolean activo = true;

    //Constructores
    public Reserva() {
        super();
    }

    public Reserva(Calendar fechaHora, String comentario, List<Mesa> listaMesas, Cliente cliente, int horario, int cantidad) {
        this.fechaHora = fechaHora;
        this.comentario = comentario;
        this.listaMesas = listaMesas;
        this.cliente = cliente;
        this.horario = horario;
        this.cantidad = cantidad;
        this.activo = true;
    }

    //Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Calendar getFechaHora() {
        return fechaHora;
    }

    public void setFechaHora(Calendar fechaHora) {
        this.fechaHora = fechaHora;
    }

    public String getComentario() {
        return comentario;
    }

    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    public List<Mesa> getListaMesas() {
        return listaMesas;
    }

    public void setListaMesas(List<Mesa> listaMesas) {
        this.listaMesas = listaMesas;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public int getHorario() {
        return horario;
    }

    public void setHorario(int horario) {
        this.horario = horario;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    public boolean isActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    //toString
    @Override
    public String toString() {
        return "Entity.Reserva[ id=" + id + " ]";
    }
}